1. The Field of the Invention
The present invention relates to electronic messaging and, more particularly, to reliably transferring queued application messages.
2. Background and Relevant Art
Computer systems and related technology affect many aspects of society. Indeed, the computer system's ability to process information has transformed the way we live and work. Computer systems now commonly perform a host of tasks (e.g., word processing, scheduling, and database management) that prior to the advent of the computer system were performed manually. More recently, computer systems have been coupled to one another and to other electronic devices to form both wired and wireless computer networks over which the computer systems and other electronic devices can transfer electronic data. As a result, many tasks performed at a computer system (e.g., voice communication, accessing electronic mail, controlling home electronics, Web browsing, and printing documents) include the exchange of electronic messages between a number of computer systems and/or other electronic devices via wired and/or wireless computer networks.
Networks have in fact become so prolific that a simple network-enabled computing system may communicate with any one of millions of other computing systems spread throughout the globe over a conglomeration of networks often referred to as the “Internet”. Such computing systems may include desktop, laptop, or tablet personal computers; Personal Digital Assistants (PDAs); telephones; or any other computer or device capable of communicating over a digital network.
In order to communicate over a network, one computing system (referred to herein as a “sending computing system”) constructs or otherwise accesses an electronic message and transmits the electronic message over a network to another computing system (referred to herein as a “receiving computing system”). The electronic message may be read by a human user as when the electronic message is an e-mail or instant message, or may be read, instead, by an application running on the receiving computing system. The electronic message may be constructed by an application running on the sending computing system with the possible assistance of a human user.
In some environments, applications communicate with one another using queued communication. Queued communication includes mechanisms for a sending application to write a message into a queue and for a receiving application to read the message from the queue. The queue maintains communication state outside of the communicating parties, and provides a level of indirection between them. Queued communication is beneficial since it can increase fault tolerance.
For example, queued communication mechanisms can provide failure isolation allowing communicating applications to fail and restart independently, without losing communication state. That is, a sending application or receiving application can fail and restart without losing communication state related to communication between the sending application and the receiving application. Further, queued communication mechanisms can provide connectivity isolation allowing communicating applications to come and go as needed. Thus, after writing a message to a queue, a sending application can go down without affecting the receiving application's ability to read the queued message.
To increase availability, some queue mechanisms implement a distributed queue model. For example, a sending application writes to a queue near the sending application and a receiving application reads from a (potentially different) queue near the receiving application. In distributed queue environments, the queues can transfer messages to and from other queues such that, for example, a message written to a sending queue (corresponding to a sending application) is delivered to a receiving queue (corresponding to a receiving application).
Unfortunately, most message queuing systems use proprietary protocols that limit interoperability. In some environments, such as, for example, relatively larger distributed networks, various queuing systems may be owned by different entities. Thus, in these environments there may be no way to ensure that all queuing systems implement a protocol that is compatible with other queuing systems. Accordingly, queuing systems can be limited to communicating only with other queuing systems that implement the same proprietary protocol.
Additionally, queuing environments (both single queue and distributed queue) have limited, if any, mechanisms for ensuring secured, reliable transfer of application messages from a sending application to a receiving application. For example, an application or queue failure can cause a message to be lost. Further, there is typically limited, if any, mechanism to store and forward messages at intermediaries and to recover from a failure at a store and forward intermediary. Additionally, it is difficult to guarantee that intermediaries ensure security constraints on messages and meet the reliable assurances specified for messages. Therefore systems, methods, and computer program products for reliably transferring queued application messages would be advantageous.